//package com.lanhao.aot.carrierintegration.meest;
//
//import java.io.File;
//import java.io.IOException;
//import java.util.List;
//import java.util.Map;
//
//import org.apache.commons.io.FileUtils;
//import org.apache.commons.lang3.tuple.Pair;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
//import com.beust.jcommander.internal.Lists;
//import com.beust.jcommander.internal.Maps;
//
//import cn.hutool.core.lang.UUID;
//import cn.hutool.core.util.StrUtil;
//import cn.hutool.http.HttpRequest;
//import cn.hutool.poi.excel.ExcelUtil;
//import cn.hutool.poi.excel.ExcelWriter;
//
///**
// * 乌克兰物流商对接
// * @author Administrator
// */
//public class MeestUtil {
//	public static final Logger LOG = LoggerFactory.getLogger(MeestUtil.class);
//	public static final String LOGIN = "project_meest_china";
//	public static final String PASSWORD = "Fj4d0vBF53U8";
//	public static final String CONTRACT_ID = "1ff477d4-6dbe-11ee-80c1-000c2961d091";
//	// https://wiki.meest-group.com/api/ua/v3.0/openAPI
//	public static final String BASE_URL = "https://api.meest.com/v3.0/openAPI";
//	public static final String TOKEN_URL = BASE_URL + "/auth";
//	public static final String REFRESH_TOKEN_URL = BASE_URL + "/refreshToken";
//	public static final String PARCEL_URL = BASE_URL + "/parcel";
//	
//	public static final String PRINT_URL = BASE_URL + "/print/declaration/{barCode}/pdf";
//	
//	
//	public static final String ADDRESS_SEARCH_URL = BASE_URL + "/addressSearch";
//	public static final String CITY_SEARCH_URL = BASE_URL + "/citySearch";
//	public static final String BRANCH_SEARCH_URL = BASE_URL + "/branchSearch";
//	public static final String ZIPCODE_SEARCH_URL = BASE_URL + "/zipCodeSearch/";
//	
//	public static final String SERVICE_TYPE = "Branch";
//	
//	public static final Double DEFAULT_WEIGHT = 1.0d;
//	
//	public static void main(String[] args) {
//		
//		Map<String, String> headers = getRequestHeader();
//		
//		// 仓库的addressId = 4dcc0e87-e0d3-11df-9b37-00215aee3ebe
////		String cityName = "Burshtyn";
////		String streetName = "Kaluska";
////		Pair<Boolean, String> cityR = getCityId(cityName, headers);
////		String cityId = StringUtils.EMPTY;
////		if(cityR.getLeft()) {
////			cityId = cityR.getRight();
////		}
////		String addressId = StringUtils.EMPTY;
////		Pair<Boolean, String> addressR = getAddressId(streetName, cityId, headers);
////		if(addressR.getLeft()) {
////			addressId = addressR.getRight();
////		}
////		LOG.info("获取到的addressId={}", addressId);
//		
//		
////		try {
////			List<String> readLines = FileUtils.readLines(new File("D:/cityList.txt"), "UTF-8");
////			doBatchBranchIDGet(readLines, headers);
////		} catch (Exception e) {
////			e.printStackTrace();
////		}
//		
//		String cityName = "Nizhynskyi";
////		Pair<Boolean, String> branchR = getBranchId(cityName, headers);
//		Pair<Boolean, String> branchR = getBranchIdWithZipCode("25022", headers);
//		String branchId = StringUtils.EMPTY;
//		if(branchR.getLeft()) {
//			branchId = branchR.getRight();
//		} else {
//			String error = branchR.getRight();
//			LOG.info("调用branchSearch查询快递点失败，错误信息={}", error);
//			return;
//		}
//		LOG.info("根据买家城市city={}获取到寄件点信息branchId={}", cityName, branchId);
//		
//<<<<<<< .mine
//		String taskNo = UUID.fastUUID().toString(true);
//		callParcel(branchId, taskNo, headers);
//||||||| .r117
////		String taskNo = UUID.fastUUID().toString(true);
////		callParcel(branchId, taskNo, headers);
//=======
//		String taskNo = UUID.fastUUID().toString(true);
//		callParcel("d0a207f3-0115-11df-b41f-00215aee3ebe", taskNo, headers);
//>>>>>>> .r135
//		
////		String barCode = "715-6665606";
//		// 715-6665606
////		String url = "https://api.meest.com/v3.0/openAPI/print/declaration/" + barCode + "/pdf";
////		HttpResponse execute = HttpRequest.get(url).addHeaders(headers).execute();
////		File tmpFile = new File("D:/" + barCode + ".PDF");
////		long s = execute.writeBody(tmpFile);
////		long s = HttpUtil.downloadFile(url, tmpFile);
////		LOG.info("下载标签文件，文件大小s={}", s);
//		
//		
////		getUACityList(headers);
//		
//<<<<<<< .mine
//||||||| .r117
//		getBranchIdWithZipCode("76006", headers);
//=======
////		getBranchIdWithZipCode("76006", headers);
//>>>>>>> .r135
//	}
//	
//	public static Pair<Boolean, String> getAuthToken() {
//		JSONObject request = new JSONObject();
//		request.put("username", LOGIN);
//		request.put("password", PASSWORD);
//		String requestBody = request.toJSONString();
//		return callTokenApi(requestBody, TOKEN_URL);
//	}
//	
//	public static Pair<Boolean, String> getRefreshToken() {
//		JSONObject request = new JSONObject();
//		request.put("refreshToken", "859f0bc6a28b97b75a763c014f22e9ca");
//		String requestBody = request.toJSONString();
//		return callTokenApi(requestBody, REFRESH_TOKEN_URL);
//	}
//	
//	public static Map<String, String> getRequestHeader() {
//		String token = "";
//		Pair<Boolean, String> authTokenResult = getAuthToken();
//		if (authTokenResult.getLeft()) {
//			token = authTokenResult.getRight();
//			LOG.info("调用AUTH接口获取token={}", token);
//		} else {
//			String error = authTokenResult.getRight();
//			LOG.info("调用AUTH接口获取token失败，错误信息={}", error);
//			return null;
//		}
//		// {"status":"OK","info":{"fieldName":"","message":"","messageDetails":""},"result":{"token":"61e21f020450d5a44c803b59f5e1c585","expiresIn":"86400","refreshToken":"26f70bc8477131ed3178e24134b97027"}}
//	
//		Map<String, String> headers = Maps.newHashMap();
//		headers.put("token", token);
//		headers.put("Content-Type", "application/json");
//		
//		return headers;
//	}
//	
//	public static Pair<Boolean, String> callTokenApi(String requestBody, String url) {
//		LOG.info("请求Meest获取Token的url={}，request={}", url, requestBody);
//		String respBody = HttpRequest.post(url).timeout(5000).body(requestBody).execute().body();
//		LOG.info("请求Meest获取Token的请求结果respBody={}", respBody);
//		// respBody={"status":"OK","info":{"fieldName":"","message":"","messageDetails":""},"result":{"token":"202bba38caf8500e2da6185f5d3ce6ff","expiresIn":"86400","refreshToken":"859f0bc6a28b97b75a763c014f22e9ca"}}
//		if (StringUtils.isNotBlank(respBody)) {
//			JSONObject respObject = JSON.parseObject(respBody);
//			String status = respObject.getString("status");
//			if ("OK".equals(status)) {
//				JSONObject resultObject = respObject.getJSONObject("result");
//				String token = resultObject.getString("token");
//				String expiresIn = resultObject.getString("expiresIn");
//				String refreshToken = resultObject.getString("refreshToken");
//				LOG.info("请求乌克兰Meest，获取到的Token={}, expiresIn={}, refreshToken={}", token, expiresIn, refreshToken);
//				return Pair.of(Boolean.TRUE, token);
//			} else {
//				JSONObject infoObject = respObject.getJSONObject("info");
//				String message = infoObject.getString("message");
//				return Pair.of(Boolean.FALSE, message);
//			}
//		}
//		return Pair.of(Boolean.FALSE, "调用Token接口返回信息为空");
//	}
//	
//	public static void callParcel(String senderBranchId, String taskNo, Map<String, String> headers) {
//		
//		JSONObject request = new JSONObject();
//		request.put("weight", DEFAULT_WEIGHT);
//		request.put("contractID", CONTRACT_ID);
//		request.put("AgentID", "");
//		request.put("orderNumber", taskNo);
//		request.put("payType", "cash");
//		request.put("receiverPay", true);
//		
//		JSONObject sender = new JSONObject();
//		sender.put("name", "AnheTest");
//		sender.put("phone", "380669044239");
//		sender.put("zip", "77111");
//		sender.put("branchID", senderBranchId);
//		sender.put("building", "-");
//		sender.put("service", "Branch");
//		
//		request.put("sender", sender);
//		
//		JSONObject receiver = new JSONObject();
//		receiver.put("name", "UKR-RTN-AE");
//		receiver.put("phone", "380669044239");
//		receiver.put("zip", "77111");
////		receiver.put("branchID", "");
//		// 收件人的地址ID：4dcc0e87-e0d3-11df-9b37-00215aee3ebe，可以fixed
//		receiver.put("addressID", "4dcc0e87-e0d3-11df-9b37-00215aee3ebe");
//		receiver.put("building", "10/12");
//		receiver.put("service", "Door");
//		
//		request.put("receiver", receiver);
//		
//		JSONArray placesItems = new JSONArray();
//		JSONObject placesItem = new JSONObject();
//		placesItem.put("quantity", 1);
//		placesItem.put("placeWeight", 0);
//		placesItem.put("weight", 0.589);
//		placesItem.put("placeVolume", 0);
//		placesItem.put("volume", 5.121);
//		placesItem.put("insurance", 200);
//		placesItem.put("packID", "c26956ba-a2ce-11e4-b90b-003048d2b473");
//		placesItem.put("length", 20);
//		placesItem.put("width", 30);
//		placesItem.put("height", 10);
//		placesItem.put("wheels", "r13");
//		placesItem.put("size", "xs, s, m, l, xl");
//		placesItem.put("formatID", "101016a1-bcd6-11ff-bf0f-00215aee3eb1");
//		placesItems.add(placesItem);
//		
//		request.put("placesItems", placesItems);
//		
//		JSONArray contentsItems = new JSONArray();
//		JSONObject item = new JSONObject();
//		item.put("contentName", "AnHeStuff");
//		item.put("quantity", 1);
//<<<<<<< .mine
//		item.put("weight", 1.0);
//||||||| .r117
//		item.put("weight", DEFAULT_WEIGHT);
//=======
//>>>>>>> .r135
//		item.put("value", 0.01);
//<<<<<<< .mine
//		item.put("length", 15);
//		item.put("width", 12);
//		item.put("height", 12);
//||||||| .r117
//=======
////		item.put("weight", DEFAULT_WEIGHT);
////		item.put("length", 1);
////		item.put("width", 1);
////		item.put("weight", 1.0);
////		item.put("height", 1);
//		
//>>>>>>> .r135
//		contentsItems.add(item);
//		
//		request.put("contentsItems", contentsItems);
//		
//		JSONArray placesItems = new JSONArray();
//		JSONObject placesItem = new JSONObject();
//		placesItem.put("quantity", 1);
//		placesItem.put("placeWeight", 1);
//		placesItem.put("weight", 1);
//		placesItem.put("length", 1);
//		placesItem.put("width", 1);
//		placesItem.put("height", 1);
//		placesItem.put("formatID", "101016a1-bcd6-11ff-bf0f-00215aee3eb1");
////		placesItem.put("insurance", 200);
////		placesItem.put("wheels", "r13");
////		placesItem.put("placeVolume", 0);
////		placesItem.put("volume", 5.121);
////		placesItem.put("packID", "c26956ba-a2ce-11e4-b90b-003048d2b473");
////		placesItem.put("size", "xs, s, m, l, xl");
//		
//		placesItems.add(placesItem);
//		
//		request.put("placesItems", placesItems);
//		
//		
//		String requestBody = request.toJSONString();
//		LOG.info("请求Meest请求下单parcel的url={}，request={}", PARCEL_URL, requestBody);
//		String respBody = HttpRequest.post(PARCEL_URL).addHeaders(headers).timeout(15000).body(requestBody).execute().body();
//		LOG.info("请求Meest下单parcel结束下单，得到响应值respBody={}", respBody);
//		if (StringUtils.isNotBlank(respBody)) {
//			JSONObject respObject = JSON.parseObject(respBody);
//			String status = respObject.getString("status");
//			if ("OK".equals(status)) {
//				JSONObject resultObject = respObject.getJSONObject("result");
//				String parcelID = resultObject.getString("parcelID");
//				String barCode = resultObject.getString("barCode");
//				LOG.info("下单成功，获取barCode={}，parcelID={}", barCode, parcelID);
//			} else {
//				JSONObject infoObject = respObject.getJSONObject("info");
//				String fieldName = infoObject.getString("fieldName");
//				String message = infoObject.getString("message");
//				LOG.info("乌克兰Parcel失败, message={}", fieldName + "|" + message);
//			}
//		}
//	}
//	
//	
//	/**
//	 * 获取寄件人的所在城市的branchId
//	 * @param cityName
//	 * @param headers
//	 * @return
//	 */
//	public static Pair<Boolean, String> getBranchIdWithCityName(String cityName, Map<String, String> headers) {
//		JSONObject request = new JSONObject();
//		JSONObject filters = new JSONObject();
//		filters.put("cityDescr", cityName + "%");
//		request.put("filters", filters);
//		LOG.info("乌克兰branchSearch url={}, request={}", BRANCH_SEARCH_URL, request.toJSONString());
//		String respBody = HttpRequest.post(BRANCH_SEARCH_URL).addHeaders(headers).timeout(10000)
//				.body(request.toJSONString()).execute().body();
//		LOG.info("乌克兰branchSearch返回结果, respBody={}", respBody);
//
//		JSONObject respObject = JSON.parseObject(respBody);
//		String status = respObject.getString("status");
//		if ("OK".equals(status)) {
//			JSONArray resultArray = respObject.getJSONArray("result");
//			if (resultArray != null && resultArray.size() > 0) {
//				JSONObject resultObject = resultArray.getJSONObject(0);
//				String branchID = resultObject.getString("branchID");
//				return Pair.of(Boolean.TRUE, branchID);
//			}
//			return Pair.of(Boolean.FALSE, "查询branchID返回结果为空");
//		}
//		JSONObject infoObject = respObject.getJSONObject("info");
//		String fieldName = infoObject.getString("fieldName");
//		String message = infoObject.getString("message");
//		LOG.info("乌克兰查询branch失败, message={}", fieldName + "|" + message);
//		return Pair.of(Boolean.FALSE, message);
//	}
//	
//	public static Pair<Boolean, String> getBranchIdWithZipCode(String zipCode, Map<String, String> headers) {
//		String url = ZIPCODE_SEARCH_URL + zipCode;
//		String respBody = HttpRequest.get(url).addHeaders(headers).setConnectionTimeout(20000).execute().body();
//		LOG.info("根据zipCode={}查询城市信息结果respBody={}", zipCode, respBody);
//		if(StringUtils.isNotBlank(respBody)) {
//			JSONObject respObject = JSON.parseObject(respBody);
//			String status = respObject.getString("status");
//			if ("OK".equals(status)) {
//				JSONArray resultArray = respObject.getJSONArray("result");
//				if (resultArray != null && resultArray.size() > 0) {
//					JSONObject resultObject = resultArray.getJSONObject(0);
//					JSONObject cityObject = resultObject.getJSONObject("cityDescr");
//					String cityNameEn = cityObject.getString("descrEN");
//					Pair<Boolean, String> r = getBranchIdWithCityName(cityNameEn, headers);
//					if (r.getLeft()) {
//						String desc = "根据zipCode=" + zipCode + "查询到的城市名为" + cityNameEn + ",得到branchId为" + r.getRight();
//						LOG.info(desc);
//						return Pair.of(Boolean.TRUE, desc);
//					}
//				}
//				return Pair.of(Boolean.FALSE, "查询branchID返回结果为空");
//			}
//			JSONObject infoObject = respObject.getJSONObject("info");
//			String fieldName = infoObject.getString("fieldName");
//			String message = infoObject.getString("message");
//			LOG.info("乌克兰查询branch失败, message={}", fieldName + "|" + message);
//		}
//		return Pair.of(Boolean.FALSE, "查询branchID返回结果为空");
//	}
//	
//	
//	/******************此部分内容代码用不上，仅作为获取仓库branchID使用***************************/
//	/**
//	  *  获取仓库的地址ID信息
//	 * @param address
//	 * @param cityID
//	 * @param headers
//	 * @return
//	 */
//	public static Pair<Boolean, String> getAddressId(String address, String cityID, Map<String, String> headers) {
//		JSONObject request = new JSONObject();
//		JSONObject filters = new JSONObject();
//		filters.put("cityID", cityID);
//		filters.put("addressDescr", "%" + address + "%");
//		request.put("filters", filters);
//		LOG.info("乌克兰addressSearch url={}, request={}", ADDRESS_SEARCH_URL, request.toJSONString());
//		String respBody = HttpRequest.post(ADDRESS_SEARCH_URL).addHeaders(headers).setConnectionTimeout(20000).body(request.toJSONString()).execute().body();
//		LOG.info("乌克兰addressSearch返回结果, respBody={}", respBody);
//		
//		JSONObject respObject = JSON.parseObject(respBody);
//		String status = respObject.getString("status");
//		if ("OK".equals(status)) {
//			JSONArray resultArray = respObject.getJSONArray("result");
//			JSONObject resultObject = resultArray.getJSONObject(0);
//			String addressID = resultObject.getString("addressID");
//			return Pair.of(Boolean.TRUE, addressID);
//		}
//		JSONObject infoObject = respObject.getJSONObject("info");
//		String fieldName = infoObject.getString("fieldName");
//		String message = infoObject.getString("message");
//		LOG.info("乌克兰查询地址失败, message={}", fieldName + "|" + message);
//		return Pair.of(Boolean.FALSE, message);
//	}
//	
//	/**
//	 *  获取城市ID
//	 * @param city
//	 * @param headers
//	 * @return
//	 */
//	public static Pair<Boolean, String> getCityId (String city, Map<String, String> headers) {
//		JSONObject request = new JSONObject();
//		JSONObject filters = new JSONObject();
//		// 固定值
//		filters.put("countryID", "c35b6195-4ea3-11de-8591-001d600938f8");
//		filters.put("cityDescr", city + "%");
//		request.put("filters", filters);
//		String respBody = HttpRequest.post(CITY_SEARCH_URL).addHeaders(headers).setConnectionTimeout(20000).body(request.toJSONString()).execute().body();
//		LOG.info("乌克兰citySearch返回结果, respBody={}", respBody);
//		JSONObject respObject = JSON.parseObject(respBody);
//		String status = respObject.getString("status");
//		if ("OK".equals(status)) {
//			JSONArray resultArray = respObject.getJSONArray("result");
//			JSONObject resultObject = resultArray.getJSONObject(0);
//			String cityID = resultObject.getString("cityID");
//			return Pair.of(Boolean.TRUE, cityID);
//		}
//		JSONObject infoObject = respObject.getJSONObject("info");
//		String fieldName = infoObject.getString("fieldName");
//		String message = infoObject.getString("message");
//		LOG.info("乌克兰查询城市失败, message={}", fieldName + "|" + message);
//		return Pair.of(Boolean.FALSE, message);
//	}
//	
//	public static Map<String, String> doBatchBranchIDGet(List<String> readLines, Map<String, String> headers) {
//		try {
//			Map<String, String> cityBranchMap = Maps.newHashMap();
//			for (String cityName : readLines) {
//				String newCityName = StrUtil.upperFirst(cityName);
//				Pair<Boolean, String> branchR = getBranchIdWithCityName(newCityName, headers);
//				String branchId = StringUtils.EMPTY;
//				if(branchR.getLeft()) {
//					branchId = branchR.getRight();
//					cityBranchMap.put(cityName, branchId);
//				} else {
//					String error = branchR.getRight();
//					LOG.info("调用branchSearch查询快递点失败，错误信息={}", error);
//					cityBranchMap.put(cityName, "未获取到branchID");
//				}
//				LOG.info("根据买家城市city={}获取到寄件点信息branchId={}", cityName, branchId);
//			}
//			FileUtils.write(new File("D:/branch_r.txt"), JSON.toJSONString(cityBranchMap), "UTF-8");
//			
//			return cityBranchMap;
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//
//		return null;
//	}
//	
//	public static List<UACityDTO> getUACityList(Map<String, String> headers) {
//		List<String> regionList = Lists.newArrayList();
//		regionList.add("ВІННИЦЬКА");
//		regionList.add("ВОЛИНСЬКА");
//		regionList.add("ДНІПРОПЕТРОВСЬКА");
//		regionList.add("ДОНЕЦЬКА");
//		regionList.add("ЖИТОМИРСЬКА");
//		regionList.add("ЗАКАРПАТСЬКА");
//		regionList.add("ЗАПОРІЗЬКА");
//		regionList.add("ІВАНО-ФРАНКІВСЬКА");
//		regionList.add("КИЇВСЬКА");
//		regionList.add("КІРОВОГРАДСЬКА");
//		regionList.add("ЛУГАНСЬКА");
//		regionList.add("ЛЬВІВСЬКА");
//		regionList.add("МИКОЛАЇВСЬКА");
//		regionList.add("ОДЕСЬКА");
//		regionList.add("ПОЛТАВСЬКА");
//		regionList.add("РІВНЕНСЬКА");
//		regionList.add("СУМСЬКА");
//		regionList.add("ТЕРНОПІЛЬСЬКА");
//		regionList.add("ХАРКІВСЬКА");
//		regionList.add("ХЕРСОНСЬКА");
//		regionList.add("ХМЕЛЬНИЦЬКА");
//		regionList.add("ЧЕРКАСЬКА");
//		regionList.add("ЧЕРНІВЕЦЬКА");
//		regionList.add("ЧЕРНІГІВСЬКА");
//		List<UACityDTO> cityList = Lists.newArrayList();
//		for (String regionDescr : regionList) {
//			JSONObject request = new JSONObject();
//			JSONObject filters = new JSONObject();
//			filters.put("regionDescr", regionDescr);
//			request.put("filters", filters);
//			LOG.info("乌克兰CITY_SEARCH_URL={}, request={}", CITY_SEARCH_URL, request.toJSONString());
//			String respBody = HttpRequest.post(CITY_SEARCH_URL).addHeaders(headers).setConnectionTimeout(20000).body(request.toJSONString()).execute().body();
//			LOG.info("乌克兰CITY_SEARCH_URL返回结果, respBody={}", respBody);
//			
//			JSONObject respObject = JSON.parseObject(respBody);
//			String status = respObject.getString("status");
//			if ("OK".equals(status)) {
//				JSONArray resultArray = respObject.getJSONArray("result");
//				for (int i = 0; i < resultArray.size(); i++) {
//					JSONObject cityObject = resultArray.getJSONObject(i);
//					
//					UACityDTO city = new UACityDTO();
//					
//					String cityID = cityObject.getString("cityID");
//					JSONObject cityDescrObject = cityObject.getJSONObject("cityDescr");
//					String descrUA = cityDescrObject.getString("descrUA");
//					String descrRU = cityDescrObject.getString("descrRU");
//					String descrEN = cityDescrObject.getString("descrEN");
//					
//					city.setCityID(cityID);
//					city.setDescrUA(descrUA);
//					city.setDescrRU(descrRU);
//					city.setDescrEN(descrEN);
//					city.setRegionDescr(regionDescr);
//					cityList.add(city);
//				}
//			}
//		}
//		String cityJson = JSON.toJSONString(cityList);
//		LOG.info("获取乌克兰的城市列表清单cityList={}", cityJson);
//		try {
//			FileUtils.write(new File("D:/ua_cityJson.txt"), cityJson, "UTF-8");
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		
//		// 通过工具类创建writer
//		ExcelWriter writer = ExcelUtil.getWriter("D:/ua_cityList.xlsx");
//		// 合并单元格后的标题行，使用默认标题样式
//		writer.merge(4, "乌克兰城市清单");
//		// 一次性写出内容，使用默认样式，强制输出标题
//		writer.write(cityList, true);
//		// 关闭writer，释放内存
//		writer.close();
//		
//		return cityList;
//	}
//}
